typescript-ts-mode: Improve function body indentation (bug#78121)
authorKonstantin Kharlamov <Hi-Angel@yandex.ru>
Tue, 29 Apr 2025 14:51:18 +0000 (21:51 +0700)
committerYuan Fu <casouri@gmail.com>
Mon, 26 May 2025 03:50:41 +0000 (20:50 -0700)
Older code was calculating body indentation depending on function
parameters alignment.  This is incorrect, because if parameters are
misaligned, so will the function body.  Instead, use offset of the
previous standalone parent.

* lisp/progmodes/typescript-ts-mode.el:
(typescript-ts-mode--indent-rules): Stop depending on function
parameters indentation for calculating body content and the closing
`}'.
* test/lisp/progmodes/typescript-ts-mode-resources/indent.erts:
(Function body with params misindented (bug#78121)): Add new test.

lisp/progmodes/typescript-ts-mode.el
test/lisp/progmodes/typescript-ts-mode-resources/indent.erts

index 6cc1eb0bea975846c911f3460b35a4a54d667559..72b9d31204c290ab9be7602d7860928625f6eda4 100644 (file)
@@ -111,7 +111,7 @@ declarations, accounting for the length of keyword (var, let, or const)."
 Argument LANGUAGE is either `typescript' or `tsx'."
   `((,language
      ((parent-is "program") column-0 0)
-     ((node-is "}") parent-bol 0)
+     ((node-is "}") standalone-parent 0)
      ((node-is ")") parent-bol 0)
      ((node-is "]") parent-bol 0)
      ((node-is ">") parent-bol 0)
@@ -121,7 +121,7 @@ Argument LANGUAGE is either `typescript' or `tsx'."
      ((parent-is "ternary_expression") standalone-parent typescript-ts-mode-indent-offset)
      ((parent-is "member_expression") parent-bol typescript-ts-mode-indent-offset)
      ((parent-is "named_imports") parent-bol typescript-ts-mode-indent-offset)
-     ((parent-is "statement_block") parent-bol typescript-ts-mode-indent-offset)
+     ((parent-is "statement_block") standalone-parent typescript-ts-mode-indent-offset)
      ((or (node-is "case")
           (node-is "default"))
       parent-bol typescript-ts-mode-indent-offset)
index 8abaa81c6275765e2d35e006da2796535f3ca7d5..405566c40f071c9723adcd9e8adfaee7e9368adf 100644 (file)
@@ -164,3 +164,28 @@ interface Foo {
   bar?: boolean;
 }
 =-=-=
+
+Code:
+  (lambda ()
+    (setq tsx-ts-mode-indent-offset 2)
+    (tsx-ts-mode)
+    (setq indent-tabs-mode nil)
+    (indent-region (line-beginning-position 7) (point-max)))
+
+Name: Function body with params misindented (bug#78121)
+
+=-=
+const f1 = (a1: string,
+            a2: number) => {
+    const f2 = (a1: string,
+                a2: number) => {
+      const f3 = (a1: string,
+                  a2: number) =>
+        {
+          return;
+        }
+      return;
+    }
+  return;
+}
+=-=-=